/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import Modelo.Ataque;
import Modelo.Caballero;
import Modelo.Defensa;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

/**
 *
 * @author Sebas
 */
public class XML {
    private URL nombre;
    //private File archivo;
    private Document documento;
    private Element nodoRaiz;
    private Element nodo;
    private Element Buenos;
    private Element Malos;
    private Element nodoHijo;
    private ArrayList<Ataque> ataques;
    private ArrayList<Defensa> defensas;
    public static ArrayList<Caballero> CabBuenos;
    public static ArrayList<Caballero> CabMalos;

    /**
     * Constructor con parametros
     *
     * @param xm Nombre del archivo .xml
     */
    public XML(URL xm) {
        XML.CabBuenos = new ArrayList();
        XML.CabMalos = new ArrayList();
        //archivo = new File(xm.toString());
        nombre = xm;
    }

    /**
     * Lee el XML y ordenada los datos en listas globales
     *
     * @param xm Nombre del archivo .xml
     */
    public void leerXml() {
        SAXBuilder constructorSAX = new SAXBuilder();
        try {
            documento = (Document) constructorSAX.build(nombre);//build(archivo);
        } catch (JDOMException e) {
            System.out.println("Fichero XML no valido");
            //e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Fichero no valido");
            e.printStackTrace();
        }
        //Obtenemos el nodo raiz
        nodoRaiz = documento.getRootElement();
        Buenos = nodoRaiz.getChild("Buenos");
        Malos = nodoRaiz.getChild("Malos");
        List caballero = null;
        for (int j = 0; j < 2; j++) {
            if (j == 0) {
                caballero = Buenos.getChildren("Caballero");
            } else {
                caballero.clear();
                caballero = Malos.getChildren("Caballero");
            }

            //Lista de datos del caballero siguiente
            for (int i = 0; i < (int) caballero.size(); i++) {
                nodo = (Element) caballero.get(i);
                ataques = new ArrayList();
                defensas = new ArrayList();
                //Ataques 

                nodoHijo = nodo.getChild("ataque1");
                ataques.add(new Ataque(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                        Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                        Float.parseFloat(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                nodoHijo = nodo.getChild("ataque2");
                ataques.add(new Ataque(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                        Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                        Float.parseFloat(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                nodoHijo = nodo.getChild("ataque3");
                ataques.add(new Ataque(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                        Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                        Float.parseFloat(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                //Defensas
                nodoHijo = nodo.getChild("defensa1");
                defensas.add(new Defensa(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                        Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                        Integer.parseInt(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                nodoHijo = nodo.getChild("defensa2");
                defensas.add(new Defensa(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                        Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                        Integer.parseInt(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                nodoHijo = nodo.getChild("defensa3");
                if (!nodoHijo.getAttributeValue("Nombre").equals(".")) {
                    defensas.add(new Defensa(nodoHijo.getAttributeValue("Nombre"), Integer.parseInt(nodoHijo.getAttributeValue("Proba")),
                            Integer.parseInt(nodoHijo.getAttributeValue("tipo")),Integer.parseInt(nodoHijo.getAttributeValue("habi")),
                            Integer.parseInt(nodoHijo.getValue()), nodoHijo.getAttributeValue("Descrip")));
                }
                //Caballero
                if (j == 0) {
                    XML.CabBuenos.add(new Caballero(nodo.getAttributeValue("Nombre"), " ", Integer.parseInt(nodo.getAttributeValue("ProbAta")),
                            ataques, defensas, Integer.parseInt(nodo.getAttributeValue("nde")), Integer.parseInt(nodo.getAttributeValue("Vida")),
                            nodo.getAttributeValue("url"), false,1));
                } else {
                    if (nodo.getAttributeValue("Nombre").equals("Milicia")) {
                        XML.CabMalos.add(new Caballero(nodo.getAttributeValue("Nombre"), " ", Integer.parseInt(nodo.getAttributeValue("ProbAta")),
                                ataques, defensas, Integer.parseInt(nodo.getAttributeValue("nde")), Integer.parseInt(nodo.getAttributeValue("Vida")),
                                nodo.getAttributeValue("url"), true,2));
                    } else {
                        XML.CabMalos.add(new Caballero(nodo.getAttributeValue("Nombre"), " ", Integer.parseInt(nodo.getAttributeValue("ProbAta")),
                                ataques, defensas, Integer.parseInt(nodo.getAttributeValue("nde")), Integer.parseInt(nodo.getAttributeValue("Vida")),
                                nodo.getAttributeValue("url"), false,2));
                    }


                }


            }
        }
    }

}
